#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
视频智能分析系统 - 主入口

基于OpenCV、YOLO和AI大模型的视频智能分析全链路解决方案
"""

import os
import sys

# 确保可以导入src包
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from src.system import VideoAnalysisSystem


def main():
    """主函数，提供用户交互界面"""
    print("=" * 60)
    print("欢迎使用视频智能分析系统")
    print("基于OpenCV、YOLO和AI大模型的全链路视觉分析解决方案")
    print("=" * 60)
    
    # 选择应用类型
    print("请选择应用类型:")
    print("1. 通用应用")
    print("2. 安防监控应用")
    print("3. 交通监控应用")
    print("4. 工业质检应用")
    
    app_choice = input("请输入选择 (1-4): ")
    
    # 映射选择到应用类型
    app_types = {
        "1": "general",
        "2": "security",
        "3": "traffic",
        "4": "industrial"
    }
    
    # 获取应用类型，如果输入无效则默认使用通用应用
    app_type = app_types.get(app_choice, "general")
    
    # 检查环境变量中是否已有OpenAI配置
    has_env_config = os.getenv("OPENAI_API_KEY") is not None
    use_env_config = False
    
    # OpenAI API 配置
    print("\nAI大模型语义理解配置:")
    
    # 检查是否已有环境变量配置
    if has_env_config:
        use_env_choice = input("检测到环境变量中已配置OpenAI API，是否使用这些配置？(y/n，默认为y): ").lower()
        use_env_config = use_env_choice != 'n'  # 默认使用环境变量配置
    
    if use_env_config:
        # 使用环境变量配置
        use_llm_api = os.getenv("USE_LLM_API", "true").lower() == "true"
        api_key = None  # 将由system.py从环境变量获取
        llm_model = os.getenv("OPENAI_MODEL", "gpt-3.5-turbo")
        print(f"  - 将使用环境变量中的OpenAI配置")
        print(f"  - 使用模型: {llm_model}")
        print(f"  - {'开启' if use_llm_api else '关闭'}API调用")
    else:
        # 询问用户配置
        use_api_choice = input("是否使用OpenAI API进行高级语义分析？(y/n，默认为n): ").lower()
        use_llm_api = use_api_choice == 'y'
        
        api_key = None
        llm_model = "gpt-3.5-turbo"
        
        if use_llm_api:
            # 提示用户输入API密钥
            print("请输入您的OpenAI API密钥 (输入过程不会显示):")
            import getpass
            api_key = getpass.getpass()
            
            # 询问模型选择
            print("\n可选的模型:")
            print("1. gpt-3.5-turbo (推荐，成本较低)")
            print("2. gpt-4o (更强大但成本较高)")
            print("3. gpt-4-turbo")
            model_choice = input("请选择模型 (1-3，默认为1): ")
            
            model_map = {
                "1": "gpt-3.5-turbo",
                "2": "gpt-4o",
                "3": "gpt-4-turbo"
            }
            llm_model = model_map.get(model_choice, "gpt-3.5-turbo")
    
    # 创建系统实例
    print(f"\n正在初始化视频智能分析系统 (应用类型: {app_type})...")
    system = VideoAnalysisSystem(app_type=app_type, api_key=api_key, use_llm_api=use_llm_api, llm_model=llm_model)
    
    print("\n请选择处理模式:")
    print("1. 处理本地摄像头视频流")
    print("2. 处理网络视频流")
    print("3. 处理单张图片")
    print("4. 批量处理文件夹中的图片")
    
    mode_choice = input("请输入选择 (1-3): ")
    
    if mode_choice == "1":
        # 处理摄像头视频流
        print("正在启动摄像头视频流处理...")
        print("提示：按'q'键退出，按's'键切换应用类型，按'w'键切换窗口大小")
        system.process_video()
        
    elif mode_choice == "2":
        # 处理网络视频流
        print("提示：您可以使用以下测试HLS流URL，或输入您自己的URL")
        print("  1. 示例流1: https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/hls/xgplayer-demo.m3u8")
        print("  2. 示例流2: https://demo.unified-streaming.com/k8s/features/stable/video/tears-of-steel/tears-of-steel.ism/.m3u8")
        print("  3. 示例流3: https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")
        print("直接按回车将使用默认示例流")
        
        video_url = input("请输入视频流URL: ")
        
        # 设置默认HLS流URL
        default_url = "https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/hls/xgplayer-demo.m3u8"
        selected_url = default_url if video_url.strip() == "" else video_url
        
        print(f"正在连接视频流: {selected_url}")
        print("提示：网络视频流可能需要一些时间来缓冲，请耐心等待")
        print("提示：按'q'键退出，按's'键切换应用类型，按'w'键切换窗口大小")
        system.process_video(selected_url)
        
    elif mode_choice == "3":
        # 处理单张图片
        img_path = input("请输入图片路径: ")
        if os.path.exists(img_path):
            system.process_image(img_path)
        else:
            # 检查是否有示例图片
            example_img = "example_image.jpg"
            if os.path.exists(example_img):
                print(f"图片文件不存在: {img_path}")
                print(f"正在使用示例图片进行演示: {example_img}")
                system.process_image(example_img)
            else:
                print(f"图片文件不存在: {img_path}")
                print("正在创建一个测试图像进行演示...")
                # 这里可以调用图像处理器创建测试图像
                import cv2
                import numpy as np
                test_img = np.ones((480, 640, 3), dtype=np.uint8) * 255
                cv2.putText(test_img, "测试图像", (200, 240), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 0), 3)
                cv2.imwrite("test_image.jpg", test_img)
                system.process_image("test_image.jpg")
                
    elif mode_choice == "4":
        # 批量处理文件夹中的图片
        folder_path = input("请输入图片文件夹路径: ")
        if os.path.exists(folder_path) and os.path.isdir(folder_path):
            system.batch_process_images(folder_path)
        else:
            print(f"文件夹不存在或不是有效目录: {folder_path}")
            
    else:
        print("无效的选择，默认处理摄像头视频流")
        system.process_video()


if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("\n程序被用户中断")
    except Exception as e:
        print(f"程序运行出错: {e}")
    finally:
        print("程序已退出")